package com.lesserpand.rabbitmq.rabbitmq.config;

import com.lesserpand.rabbitmq.rabbitmq.constant.MqEnum;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author pand
 * 队列配置  可以配置多个队列
 */
@Configuration
public class QueueConfig {

    @Bean
    public Queue firstQueue() {
        /**
         *durable="true" 持久化 rabbitmq重启的时候不需要创建新的队列
         *auto-delete 表示消息队列没有在使用时将被自动删除 默认是false
         *exclusive  表示该消息队列是否只在当前connection生效,默认是false
         */
        return new Queue(MqEnum.QUEUE1.getValue(), true, false, false);
    }

    @Bean
    public Queue secondQueue() {
        return new Queue(MqEnum.QUEUE2.getValue(), true, false, false);
    }

    /**
     * 消息中心实际消费队列配置，第一次消费
     *
     * @return
     */
    @Bean
    public Queue messageQueue() {
        return new Queue(MqEnum.MESSAGE_QUEUE.getValue());
    }

    /**
     * 消息中心实际消费队列配置，第二次消费
     *
     * @return
     */
    @Bean
    public Queue messageQueue2() {
        return new Queue(MqEnum.MESSAGE_QUEUE2.getValue());
    }

    /**
     * 消息中心TTL队列，这个延迟队列的消息超期以后，会路由到DIRECT_EXCHANGE交换器，第一次消费的交换器
     *
     * @return
     */
    @Bean
    public Queue messageTtlQueue() {
        return QueueBuilder
                .durable(MqEnum.MESSAGE_TTL_QUEUE.getValue())
                // 配置到期后转发的交换
                .withArgument("x-dead-letter-exchange", MqEnum.DIRECT_EXCHANGE.getValue())
                // 配置到期后转发的路由键
                .withArgument("x-dead-letter-routing-key", MqEnum.MESSAGE_QUEUE_KEY.getValue())
                .build();
    }

    /**
     * 消息中心TTL队列，这个延迟队列的消息超期以后，会路由到DIRECT_EXCHANGE2交换器，第二次消费的交换器
     *
     * @return
     */
    @Bean
    public Queue messageTtlQueue2() {
        return QueueBuilder
                .durable(MqEnum.MESSAGE_TTL_QUEUE2.getValue())
                // 配置到期后转发的交换
                .withArgument("x-dead-letter-exchange", MqEnum.DIRECT_EXCHANGE2.getValue())
                // 配置到期后转发的路由键
                .withArgument("x-dead-letter-routing-key", MqEnum.MESSAGE_QUEUE2_KEY.getValue())
                .build();
    }

    /**
     * 消息中心实际消费队列配置，第一次消费
     *
     * @return
     */
    @Bean
    public Queue skillMessageQueue() {
        return new Queue(MqEnum.SKILL_MESSAGE_QUEUE.getValue());
    }

}
